import { query } from '../../config/db.js';
import logger from '../../config/logger.js';

async function seedRoles() {
  
    logger.info('开始播种角色数据...');

    // 使用IF NOT EXISTS创建角色表，避免表已存在的错误
    await query(
      `CREATE TABLE IF NOT EXISTS roles (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) UNIQUE NOT NULL,
        description TEXT,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
      )`
    ).catch(err => {
      logger.error('创建角色表失败:', err);
      throw err;
    });
    logger.info('角色表检查/创建完成');

    // 检查并创建用户角色关联表
    await query(
      `CREATE TABLE IF NOT EXISTS user_roles (
        user_id INT,
        role_id INT,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (user_id, role_id),
        FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
        FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE
      )`
    ).catch(err => {
      logger.error('创建用户角色关联表失败:', err);
      throw err;
    });
    logger.info('用户角色关联表已创建');

    // 清空角色表
    // 禁用外键约束
    await query('SET FOREIGN_KEY_CHECKS = 0').catch(err => {
      logger.error('禁用外键约束失败:', err);
      throw err;
    });
    await query('TRUNCATE TABLE roles');
    // 启用外键约束
    await query('SET FOREIGN_KEY_CHECKS = 1').catch(err => {
      logger.error('启用外键约束失败:', err);
      throw err;
    });
    // MySQL不支持RESTART IDENTITY，需要重置自增序列
    await query('ALTER TABLE roles AUTO_INCREMENT = 1').catch(err => {
      logger.error('重置自增序列失败:', err);
      throw err;
    });
    logger.info('角色表已清空');

    // 定义角色数据
    const roles = [
      ['admin', '管理员角色，拥有所有权限'],
      ['user', '普通用户角色，拥有基本权限']
    ];

    // 插入角色数据
    for (const [name, description] of roles) {
      await query(
        'INSERT INTO roles (name, description) VALUES (?, ?)',
        [name, description]
      ).catch(err => {
        logger.error('插入角色数据失败:', err);
        throw err;
      });
    }
    logger.info('角色数据已插入');

    logger.info('角色数据播种完成');
}

export default seedRoles;